1. Technical Field
The invention is related to a system and method for optimizing a graphics intensive software program for a user's computer graphics hardware. Examples of such graphics-intensive programs include flight simulations, computer aided design programs, photo-editing programs, computer games, and clear type and presentation software.
2. Background Art
Due to advances in graphical operating systems and 3D computing, there has been an enormous increase both in how much data is sent to computer monitors and the sophisticated calculations that must be done to determine what is seen on the screen. As a result, computer video cards have evolved to be much more like co-processors. The video card in a personal computer plays a significant role in the following important aspects of the personal computer system:                Performance: The video card is one of the components that has an impact on system performance. For example, application software that depends on a high frame rate (how many times per second the screen is updated with new information) for smooth animation, is often impacted far more by the choice of video card than by the choice of system Central Processing Unit (CPU).        Software Support: Certain programs, such as, in particular, video games and other graphics programs, require support from the video card. Some programs, such as 3D-enhanced games, will not run at all on a video card that does not support them.        Reliability and Stability: Choosing the wrong video card can cause problematic system behavior, such as computer system crashes and hangs. In particular, some cards or types of cards are notorious for having unstable drivers, which can cause a host of difficulties.        
Because the computer screen is two-dimensional (2D), everything that a personal computer displays must be two-dimensional as well. In order for the computer monitor to display three-dimensional (3D) objects, it is necessary for them to be converted to 2D images. This requires special processing and a large amount of computing power. The push for more realism, more detailed graphics, and faster speeds in such programs as action games, flight simulators, graphics programs, computer aided design (CAD) applications and presentation software, means that more 3D work must be done in a shorter period of time, requiring the use of specialized 3D accelerators. To perform the large amount of computation work necessary to translate 3D images to 2D in a realistic manner, accelerators were designed that did much of this work with specialized hardware, instead of forcing the system processor to do it. Using a 3D accelerator allows programs to display virtual 3D worlds or 3D objects with a level of detail and color that is impossible with a standard 2D video card. Common 3D operations wherein 3D accelerators are used include:                Gourad Shading: This is an algorithm that is used to give 3D surfaces realistic shading. The effect helps the object appear to have depth and helps to define the shape better.        Clipping: This operation determines what part of an object is visible on the screen and “clips out” any part that the user cannot see. Parts of objects that are off-screen are ignored, thereby improving system performance because the off-screen portions do not have to be computed for rendering.        Lighting: Objects in the real world have their appearance shaped by the light sources in the scene. Lighting effects cause color shading, light reflection, shadows and other effects to be added to objects based on their position and the position of light sources in the room.        Transparency/Opacity: Objects in the real world are transparent, semi-transparent or opaque. These transparency/opacity features are emulated in software/hardware.        Texture Mapping: For realistic objects, it is necessary to overlay pictures on them to give them texture. Texture mapping allows objects to be made so that they appear to have substance instead of being “flat”. There are several different types of texture mapping that are used by various software and hardware.        Dithering: This is an effect that is actually used in many different places, including regular 2D graphics and also in printing. Dithering is the process of mixing a small number of colors together in specific patterns to create the illusion of there being a larger number of colors. In 3D, it is used largely to show more realistic color without needing to increase the color depth of the image (which means more computation time and more memory to store the graphics). Dithering takes advantage of the eye's tendency to blur spots of different colors by averaging their effects and merging them into a single perceived shade or color.        Fogging: Fogging serves two purposes by blurring objects that are in the distance. First, it helps to make the scene appear more realistic. Second, fogging allows the 3D process to be performed more quickly because those objects in the distance that are “fogged out” can be computed more quickly since they are shown in less detail.        Filtering: There are several types of filtering that can be applied to an image. These are used to “clean up” the image and smooth out textures and shapes. In particular, bilinear filtering is used when showing textures up close to remove the “blocky” look that results from magnifying an object when showing it at the front of a scene. Bilinear filtering refers to a process where the graphics hardware smooths the appearance of a texture by interpolating from one pixel value to the next. Textures appear perfectly smooth, even if viewed from very close, thanks to bilinear filtering.        
In order to benefit from 3D acceleration features, it is necessary for software to know about them and support them. Unfortunately, with 3D being a relatively new field, a whole new breed of different and incompatible video cards has hit the market. Different cards have different capabilities. Additionally, different cards will behave differently—that is, the same instructions given to various video cards can yield different results. Support for a particular card is required from a program if it is to take advantage of the 3D card's features. Otherwise, the program will not benefit much (or at all) from the 3D hardware. Most of the specific support for 3D hardware is from games. This comes usually in the form of special versions that have been tailored to different video cards. In addition to a regular version of a popular game, a version may be created by a company to support a particular 3D chipset. This version will usually either have much superior graphics, faster performance, or both. However, it typically will not work with a different type of 3D card. Fortunately, new standard libraries are being developed to tackle this problem. Driver libraries like Microsoft Corporation's Direct3D® and OpenGL are designed to allow software to be written generically without tailoring them to each 3D chipset on the market, allowing them to be used regardless of what chipset is used. Software applications that are designed to use these libraries can avoid some of the need for customization.
Many applications employ 3D graphics and 3D accelerators, as well as driver libraries such as Direct3D®, to improve the performance and reliability of the application software. One such application, for example, is presentation software, such as Microsoft Corporation's PowerPoint®. PowerPoint® has a capability of providing a “slideshow” feature wherein a presenter can present a presentation in slide form to an audience using a computer.
Customers desire great performance in slideshow when they present. They want the animations to look as smooth as the ones they see on television. In order to do this, the PowerPoint® presentation program uses hardware graphics acceleration provided by the Direct3D® driver library. Unfortunately, because some video cards support certain graphics features, while others do not, when the application software tries to use them, they do not work properly. For example, some cards crash or hang on certain function calls. Obviously, it is extremely important for the slideshow feature to work reliably. If a game crashes, the user can reboot and start again without much issue. However, if a slideshow crashes it is another matter. For example, if a salesperson is giving a presentation to a large group of people and the slideshow crashes, the audience may consider the presenter incompetent.